package com.sky.chapter2.visibility;

/**
 * date : 2021-03-26
 * @author zhengbinMac
 * @author : wushikai
 *
 * 演示 不同线程之间数据的可见性问题;
 *
 */
public class NoVisibility {

     private static boolean flag = true ;   //没有 volatile 关键字, 读线程看不到 主线程 修改的 flag, 根本不会停下来;
    // volatile static boolean flag = true ;


    private static class ReaderThread extends Thread {
        @Override
        public void run() {
            while (flag) {
                //如果读不到 flag 的值, 这个循环将会一直走下去;
            }
            System.out.println( Thread.currentThread().getName() +   " 退出 ");
        }
    }

    public static void main(String[] args) throws InterruptedException {
        ReaderThread readerThread = new ReaderThread();
        readerThread.setName("读线程");
        readerThread.start();
        Thread.sleep(1000);
        flag = false;  //主线程把flag 设置成 false , 想要 读线程 停止循环 ;
    }
}
